1. DBI 功能介绍
- 在 DDR4 中,逻辑 0 比逻辑 1 消耗更多的功耗,而在 LPDDR4 中,逻辑 1 比逻辑 0 消耗更多的功耗。
- DBI 通过对每个数据字节进行反转来减少功耗。如果某个字节中 0 的数量(对于 DDR4)或 1 的数量(对于 LPDDR4)超过 4,那么该字节的数据将被反转。
- 使用一个 DBI 信号(每个数据字节 1 位)来指示是否进行了数据反转。
2. 写操作和读操作中的DBI
- 对于写操作,DBI 信号与 DFI 接口的
dfi_wrdata_mask
信号共享。 - 对于读操作,有一个专用的信号
dfi_rddata_dbi
来指示数据是否需要反转。
支持的设备类型
- DBI 功能只支持 x8 和 x16 的设备,不支持 x4 设备。
3. DDR4 与 LPDDR4 的差异
- 在 DDR4 中,写操作的 DBI 和数据掩码(Data Mask)不能同时启用。而在 LPDDR4 中,写操作的 DBI 和数据掩码是可以同时启用的。
- 在 DBI 模式下,DDR4 不允许带掩码的写操作,但 LPDDR4 允许带掩码的写操作。在这种情况下,uMCTL2(内存控制器)通过将
dfi_wrdata
字节设置为 0xFF,并将dfi_wrdata_mask
设置为 0 来指示掩码字节。
4. DBI控制的实现
- DBI 的实现可以在控制器(uMCTL2)或 PHY(物理层)中进行。在 uMCTL2 中,DBI 的控制由
DFIMISC.phy_dbi_mode
位控制。- 如果
phy_dbi_mode
设置为 1,则 DBI 的生成和数据反转在 PHY 中完成,DFI 接口上的读写数据与 DBI 禁用时一样,dfi_rddata_dbi
信号将被忽略。 - 如果
phy_dbi_mode
设置为 0,则 DBI 生成和数据反转在 uMCTL2 中完成。在写操作时,DBI 值会被放在dfi_wrdata_mask
信号上;在读操作时,dfi_rddata_dbi
信号决定是否需要反转读数据的极性。
- 如果
5. DBI 控制寄存器
DBICTL
寄存器包含三个字段:rd_dbi_en
:启用读 DBI。wr_dbi_en
:启用写 DBI。dm_en
:启用数据掩码。
- 软件必须确保这些值与写入模式寄存器的值一致。
6. 启用读 DBI时,延迟增加
- 如果启用读 DBI(
rd_dbi_en
),JEDEC规范要求 DDR4 的 CAS 延迟(CL)或 LPDDR4 的读取延迟(RL)必须增加。因此,在启用 DBI 时,必须根据增加的延迟调整相关的寄存器。
需要调整的寄存器
启用读 DBI时,以下寄存器需要根据 CL(或 RL)调整:
DFITMG0.dfi_t_rddata_en
DRAMTMG2.read_latency
DRAMTMG2.rd2wr
DFITMG2.dfi_tphy_rdcslat
INIT4.emr2
(仅限 LPDDR4)INIT6.mr5
(仅限 DDR4)
添加延迟(Additive Latency,AL)与 DDR4
- 如果选择了非零的添加延迟(AL)用于 DDR4,则也与 CL 相关。因此,以下寄存器也可能需要更新。在这种情况下,需要先进入自刷新模式,然后更新这些寄存器,因为
DFITMG0.dfi_tphy_wrlat
是一个“组 2”的准动态寄存器。 - 需要更新的寄存器包括:
DFITMG0.dfi_tphy_wrlat
DRAMTMG0.wr2pre
DRAMTMG1.rd2pre
DRAMTMG2.write_latency
DRAMTMG4.t_rcd
启用或禁用 DBI 的步骤
启用或禁用 DBI 时,必须按照以下顺序操作:
- 进入准动态寄存器写入模式:如果 DDR4 选择了非零的 AL,则需要进入自刷新模式。在没有非零 AL 的情况下,参照手册中的 “Group 1” 模式,禁用读写流量。
- 设置
DBICTL.rd_dbi_en
和DBICTL.wr_dbi_en
:根据需要启用或禁用读写DBI。 - 设置 DRAM 模式寄存器:使其与先前的设置匹配。
- 调整 DDR4 的 CL(在 MR0 中):LPDDR4 不需要更改 CL。
- 根据 CL(或 RL)和 AL 调整寄存器:根据需要调整上述相关寄存器。
- 退出准动态模式:退出自刷新模式或重新启用读写流量。
7. 准动态寄存器
- 准动态寄存器是指那些在某些模式下(如自刷新、深度睡眠模式等)仍然可以写入的寄存器。在进入或退出这些模式时,需要特别注意寄存器的写入顺序。
本文作者:
ICXNM-ZLin
本文链接: https://talent-tudou.github.io/2024/11/27/DDR/uMCTL2-Data Bus Inversion(DBI)/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
本文链接: https://talent-tudou.github.io/2024/11/27/DDR/uMCTL2-Data Bus Inversion(DBI)/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!